home *** CD-ROM | disk | FTP | other *** search
/ Visual Cafe 3 / Visual Cafe 3.ISO / Vcafe / JFC.bin / HRuleView.java < prev    next >
Text File  |  1998-06-30  |  6KB  |  205 lines

  1. /*
  2.  * @(#)HRuleView.java    1.12 98/03/13
  3.  * 
  4.  * Copyright (c) 1997 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * This software is the confidential and proprietary information of Sun
  7.  * Microsystems, Inc. ("Confidential Information").  You shall not
  8.  * disclose such Confidential Information and shall use it only in
  9.  * accordance with the terms of the license agreement you entered into
  10.  * with Sun.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  15.  * PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES
  16.  * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
  17.  * THIS SOFTWARE OR ITS DERIVATIVES.
  18.  * 
  19.  */
  20. package com.sun.java.swing.text.html;
  21.  
  22. import java.awt.*;
  23. import com.sun.java.swing.BorderFactory;
  24. import com.sun.java.swing.border.*;
  25. import com.sun.java.swing.text.*;
  26. import java.util.Enumeration;
  27. import java.lang.Integer;
  28.  
  29. /**
  30.  * A view implementation to display an html horizontal
  31.  * rule.
  32.  *
  33.  * @author  Timothy Prinzing
  34.  * @author  Sara Swanson
  35.  * @version 1.12 03/13/98
  36.  */
  37. class HRuleView extends View  {
  38.  
  39.     /**
  40.      * Creates a new view that represents an <hr> element.
  41.      *
  42.      * @param elem the element to create a view for
  43.      */
  44.     public HRuleView(Element elem) {
  45.     super(elem);
  46.     AttributeSet attr = elem.getAttributes();
  47.  
  48.     if (attr != null) {
  49.         margin_left = StyleConstants.getLeftIndent(attr);
  50.         margin_right = StyleConstants.getRightIndent(attr);
  51.         if (margin_left <= 0)
  52.         margin_left = 15;
  53.         if (margin_right <= 0)
  54.         margin_right = 15;
  55.             alignment = StyleConstants.getAlignment(attr);
  56.         noshade = (String) attr.getAttribute("noshade");
  57.         String sizestr = (String)attr.getAttribute("size");
  58.         if (sizestr != null)
  59.             size = (Integer.valueOf(sizestr)).intValue();
  60.         String hrwidthstr = (String)attr.getAttribute("width");
  61.         if (hrwidthstr != null)
  62.         hrwidth = (Integer.valueOf(hrwidthstr)).intValue();
  63.     }
  64.  
  65.     bevel = BorderFactory.createLoweredBevelBorder();
  66.     }
  67.  
  68.     // --- View methods ---------------------------------------------
  69.  
  70.     /**
  71.      * Paints the view.
  72.      *
  73.      * @param g the graphics context
  74.      * @param a the allocation region for the view
  75.      * @see View#paint
  76.      */
  77.     public void paint(Graphics g, Shape a) {
  78.     Rectangle alloc = a.getBounds();
  79.     int x = 0;
  80.     int y = alloc.y;
  81.     int width = alloc.width - (int)(margin_left + margin_right);  
  82.     if (hrwidth > 0)
  83.         width = hrwidth;
  84.     int height = alloc.height;
  85.      if (size > 0)
  86.         height = size;
  87.  
  88.     // Align the rule horizontally.
  89.         switch (alignment) {
  90.         case StyleConstants.ALIGN_CENTER:
  91.             x = alloc.x + (alloc.width / 2) - (width / 2);
  92.         break;
  93.         case StyleConstants.ALIGN_RIGHT:
  94.             x = alloc.x + alloc.width - hrwidth - (int)(margin_right);
  95.         break;
  96.         case StyleConstants.ALIGN_LEFT:
  97.         default:
  98.             x = alloc.x + (int)margin_left;
  99.         break;
  100.         }
  101.  
  102.     // Paint either a shaded rule or a solid line.
  103.     if (noshade == Constants.NULL_ATTRIBUTE)
  104.         g.fillRect(x, y, width, height);
  105.     else
  106.         bevel.paintBorder(getContainer(), g, x, y, width, height);
  107.  
  108.     }
  109.  
  110.  
  111.     /**
  112.      * Calculates the desired shape of the rule... this is
  113.      * basically the preferred size of the border.
  114.      *
  115.      * @param axis may be either X_AXIS or Y_AXIS
  116.      * @return the desired span
  117.      * @see View#getPreferredSpan
  118.      */
  119.     public float getPreferredSpan(int axis) {
  120.     Insets i = bevel.getBorderInsets(getContainer());
  121.     switch (axis) {
  122.     case View.X_AXIS:
  123.         return i.left + i.right;
  124.     case View.Y_AXIS:
  125.         if (size > 0) {
  126.             return size;
  127.         } else {
  128.         if (noshade == Constants.NULL_ATTRIBUTE) {
  129.             return 1;
  130.         } else {
  131.             return i.top + i.bottom;
  132.         }
  133.         }
  134.     default:
  135.         throw new IllegalArgumentException("Invalid axis: " + axis);
  136.     }
  137.     }
  138.  
  139.     /**
  140.      * Gets the resize weight for the axis.
  141.      * The rule is: rigid vertically and flexible horizontally.
  142.      *
  143.      * @param axis may be either X_AXIS or Y_AXIS
  144.      * @return the weight
  145.      */
  146.     public int getResizeWeight(int axis) {
  147.     if (axis == View.X_AXIS) { 
  148.         return 1;
  149.     } else if (axis == View.Y_AXIS) { 
  150.         return 0;
  151.     } else {
  152.         return 0;
  153.     }
  154.     }
  155.  
  156.     /**
  157.      * Provides a mapping from the document model coordinate space
  158.      * to the coordinate space of the view mapped to it.
  159.      *
  160.      * @param pos the position to convert
  161.      * @param a the allocated region to render into
  162.      * @return the bounding box of the given position
  163.      * @exception BadLocationException  if the given position does not
  164.      * represent a valid location in the associated document
  165.      * @see View#modelToView
  166.      */
  167.     public Shape modelToView(int pos, Shape a) throws BadLocationException {
  168.     int p0 = getStartOffset();
  169.     int p1 = getEndOffset();
  170.     if ((pos >= p0) && (pos < p1)) {
  171.         Rectangle r = new Rectangle(a.getBounds());
  172.         r.width = 0;
  173.         return r;
  174.     }
  175.     return null;
  176.     }
  177.  
  178.     /**
  179.      * Provides a mapping from the view coordinate space to the logical
  180.      * coordinate space of the model.
  181.      *
  182.      * @param x the X coordinate
  183.      * @param y the Y coordinate
  184.      * @param a the allocated region to render into
  185.      * @return the location within the model that best represents the
  186.      *  given point of view
  187.      * @see View#viewToModel
  188.      */
  189.     public int viewToModel(float x, float y, Shape a) {
  190.     Rectangle alloc = a.getBounds();
  191.     return getStartOffset();
  192.     }
  193.  
  194.     // --- variables ------------------------------------------------
  195.  
  196.     private Border bevel;
  197.     private float margin_left = 0;
  198.     private float margin_right = 0;
  199.     private int alignment = StyleConstants.ALIGN_LEFT;
  200.     private String noshade = null;
  201.     private int size = 0;
  202.     private int hrwidth = 0;
  203. }
  204.  
  205.